<?php

function caculateAKSN($ak, $sk, $url, $querystring_arrays, $method = 'GET')
{
    if ($method === 'POST'){
        ksort($querystring_arrays);
    }
    $querystring = http_build_query($querystring_arrays);
    return md5(urlencode($url.'?'.$querystring.$sk));
}

function getXYInfo($locationname)
{
    //API控制台申请得到的ak（此处ak值仅供验证参考使用）
    $ak = 'f0i7qeul7BqOtDm3F7OrMCLd2hW98RZT';

//应用类型为for server, 请求校验方式为sn校验方式时，系统会自动生成sk，可以在应用配置-设置中选择Security Key显示进行查看（此处sk值仅供验证参考使用）
    $sk = 'wZHvyZcK7KSs22sOHWGvoNPksHk17DEb';

//以Geocoding服务为例，地理编码的请求url，参数待填
    $url = "http://api.map.baidu.com/geocoder/v2/?address=%s&output=%s&ak=%s&sn=%s";

//get请求uri前缀
    $uri = '/geocoder/v2/';

//地理编码的请求中address参数
    $address = $locationname;

//地理编码的请求output参数
    $output = 'json';

//构造请求串数组
    $querystring_arrays = array (
        'address' => $address,
        'output' => $output,
        'ak' => $ak
    );

//调用sn计算函数，默认get请求
    $sn = caculateAKSN($ak, $sk, $uri, $querystring_arrays);

//请求参数中有中文、特殊字符等需要进行urlencode，确保请求串与sn对应
    $target = sprintf($url, urlencode($address), $output, $ak, $sn);

//输出计算得到的sn

//输出完整请求的url（仅供参考验证，故不能正常访问服务）
    $jsonres=file_get_contents($target);
    $arrli=json_decode($jsonres,true);
    $x=$y=0;
    if($arrli['status']=="0")
    {
        $x=$arrli['result']['location']['lng'];
        $y=$arrli['result']['location']['lat'];
    }
    return $x.",".$y;
}

if(isset($_REQUEST['testlocationname']))
{
    echo getXYInfo($_REQUEST['testlocationname']);
}

?>